// 导入wechat-http包，注意导入后先进行构建才能使用
import http from 'wechat-http'

// 1.设置基础路径
http.baseURL='https://live-api.itheima.net'

// 2.设置响应拦截器
http.intercept.response = async (res) =>{
  // 2.1对响应数据做点什么
  // console.log('登录信息',res);
  // code业务状态码维10000时才表示成功
  if(res.data.code === 10000){
    // 2.2返回相应数据
    console.log('已登录状态',res);
    return res.data
  }
  // 业务状态码为401，表示token过期，需实现无感刷新
  else if (res.data.code === 401) {
    const app = getApp()
    // 如果当前请求的路径是'/refreshToken'说明refreshToken也过期了,就停止刷新，否则会陷入死循环
    if (res.config.url.includes('/refreshToken')) {
      app.setToken('token','')
      app.setToken('refreshToken','')
      // 拿到当前页面路由(路径)
      // 获取当前页面栈数组
      const pages = getCurrentPages()
      console.log('pages',pages);
      // 获取当前页面实例
      const page = pages[pages.length - 1]
      // 从实例里面拿到路由信息进行路径拼接
      // 关闭当前页面,跳转到某页面
      // 注意事项:redirectUrl=后面的 / 不可省略
      wx.redirectTo({
        url: '/pages/login/index?redirectUrl=/'+page.route,
      })
      return 
    }
    // token登录过期的情况,自动刷新token
    
    const res2 = await http.post('/refreshToken',{},{
      header:{
        Authorization: `Bearer ` + wx.getStorageSync('refreshToken'),
      },
    })
    // console.log('token过期后的刷新',res2);
    // 存储两个新的token
    
    app.setToken('token',res2.data.token)
    app.setToken('refreshToken',res2.data.refreshToken)

    // 打印外层的res.config获取到原请求的配置
    console.log('原请求的配置',res.config);
    res.config.header={
      Authorization: `Bearer ` + wx.getStorageSync('token'),
    }
    return http(res.config)
    // const res3 = await http(res.config)
    // return res3.data

  }else{
    // 其他情况，根据后端返回的信息，前端轻提示
    console.log('登陆出错',res.data);
    wx.utils.toast(res.data.message || '业务错误，请稍后再试')
    // console.log('业务错误，请稍后再试',res.data.message);
    // wx.navigateTo({
    //   url: '/pages/login/index',
    // })
    // 主动返回失败的Promise,不执行await后续代码
    return Promise.reject(res.data)
  }
}
// 3.设置请求拦截器
http.intercept.request = (config) => {
  // 3.1对请求数据做些什么
  // config.header.Authorization = wx.getStorageSync('token')  //常见错误：有时候请求的数据中没有header
  config.header = {
    // 携带token信息
    Authorization:'Bearer ' + wx.getStorageSync('token'),
    // 如果有传递header信息，可覆盖默认的header信息
    ...config.header,
  }
  return config
}

// 3.导出
export default http

